package com.isaiah.algorithms.sort;

import java.util.Arrays;

/**
 * @Title: 选择排序
 * @Description:
 * @author: Haijun
 * @emial: isaiah@sohu.com
 * @date 2021/10/2610:11
 */
public class SelectionSort {
    public static <T>  void sort(Comparable<T>[] arr){
        // 外层循环遍历每一趟(从前向后遍历)
        for(int i = 0; i <= arr.length-1; i++){
            // 从第i个位置，从前向后遍历数组
            int minIndex = i;
            // 遍历每个未排序序列上的元素和最小索引位置上的元素进行比较
            for (int j = i+1; j< arr.length; j++ ){
                if (greater(arr[minIndex], arr[j])){
                    minIndex = j;
                }
            }
            // 交换最小索引位置上的元素到第i位置
            swap(arr, i, minIndex);

        }
    }
    /**
     * 判断a是否大于b
     * @param a
     * @param b
     * @param <T>
     * @return
     */
    private static <T> boolean greater(Comparable<T> a, Comparable<T> b){
        return a.compareTo((T) b) > 0;
    }

    /**
     * 交换数组arr的i索引与j索引上的元素
     * @param arr
     * @param i
     * @param j
     * @param <T>
     */
    private static <T> void  swap(Comparable<T>[] arr, int i, int j){
        Comparable<T> temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;

    }


    public static void main(String[] args) {
        Integer[] arr = {4, 5, 6, 3, 2, 1};
        System.out.println(Arrays.toString(arr));
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
